/* tree.h -- 二叉搜索树 */
/* 树中不允许有相同的项目 */
#ifndef _TREE_H_
#define _TREE_H_
#include <stdio.h>
#include <stdbool.h>

typedef struct item      // 可自定义项目结构
{
	char petname[20];
	char petkind[20];
} Item;

typedef struct node
{
	Item item;
	struct node * left;    // 指向左分支的指针
	struct node * right;    // 指向右分支的指针
} Node;

typedef struct tree
{
	Node * root;     // 指向树根的指针
	int size;         //  树中项目个数
} Tree;

#define MAXITEMS 10

// 初始化生成树
void InitializeTree(Tree * ptree);

// 判断树是否为空
bool TreeIsEmpty(const Tree * ptree);

// 判断树是否满
bool TreeIsFull(const Tree * ptree);

// 确定树中的项目个数
int TreeItemCount(const Tree * ptree);

// 向树中添加一个项目
bool AddItem(const Item * pi, Tree * ptree);

// 向树中查找一个项目
bool InTree(const Item * pi, const Tree * ptree);

// 向树中删除一个项目
bool DeleteItem(const Item * pi, Tree * ptree);

// 通过函数作用于树中的每一个项目
void Traverse(const Tree * ptree, void (* pfun)(Item item));

// 删除所有节点
void DeleteAll(Tree * ptree);

#endif
